﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Xml;
using HtmlAgilityPack;

namespace SaisiePagesSuperC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 199; i < 234; i++)
            {
                string url = @"http://www.superc.ca/fr/circulaire-accessible.html?method=getAccessibleFlyer&idFlyer=" + i.ToString();
                string localfilename = "SuperC" + i.ToString() + ".txt";
                Uri yuri = new Uri(url);
                GetUrl(yuri, localfilename);
                // need encoding 
                HtmlAgilityPack.HtmlWeb html = new HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = html.Load(url, "GET");
                doc.Save("_" + localfilename);
            }
            //for (int i = 199; i < 234; i++)
            //{
            //    string localfilename = "SuperC" + i.ToString() + ".txt";
            //    StreamReader reader = new StreamReader(localfilename, );
            //    string modifier = reader.ReadToEnd();
            //    modifier = traiterPageWeb(modifier);
            //    //XmlDocument doc = new XmlDocument();
            //    //doc.LoadXml(traitement);
            //}

            
            MessageBox.Show("Fini");
        }

        public void GetUrl(Uri uri, string localFileName)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            try
            {
                // Hope GetEncoding() knows how to parse the CharacterSet
                Encoding encoding = Encoding.GetEncoding(response.CharacterSet);
                StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);
                using (StreamWriter sw = new StreamWriter(localFileName, false, encoding))
                {
                    string traitement = reader.ReadToEnd();
                    traitement = traiterPageWeb(traitement, encoding); 
                    if (traitement.Contains("Désolé"))
                    {
                        throw new Exception("Pas de page disponible");
                    }
                    sw.Write(traitement);
                    sw.Flush();
                    sw.Close();
                }
            }
            finally
            {
                response.Close();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int i = 199;
            string url = @"http://www.superc.ca/fr/circulaire-accessible.html?method=getAccessibleFlyer&idFlyer=" + i.ToString();
            WebClient client = new WebClient(); 
            string downloadString = client.DownloadString(url);
        }

        private string traiterPageWeb(string fichier, Encoding enc)
        {
            // encoding = Windows-1252
            // fichier = "<noeud>" + enc.WebName + fichier;
            fichier = "<noeud>" + fichier;
            fichier += "</noeud>";
            return fichier;

        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            // check for new flyer
            // Lire la valeur dans un fichier ou BD
            
            StreamReader sr = new StreamReader("LastSaved.txt");
            int lastSaved = Convert.ToInt32(sr.ReadToEnd());
            lastSaved = lastSaved + 1;
            try
            {
                string url = @"http://www.superc.ca/fr/circulaire-accessible.html?method=getAccessibleFlyer&idFlyer=" + (lastSaved).ToString();
                string localfilename = "SuperC" + (lastSaved).ToString() + ".txt";
                sr.Close();
                sr.Dispose();
                Uri yuri = new Uri(url);
                GetUrl(yuri, localfilename);
                // sauvegarder la valeur dans le fichier ou la BD
                StreamWriter sw = new StreamWriter("LastSaved.txt");
                sw.Write(lastSaved.ToString());
                sw.Flush();
                sw.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        private string traiterFichier(string fichier, Encoding enc)
        {
            for (int i = 236; i < 252; i++)
            {
                if (i == 239 || i == 241)
                {
                    continue;
                }
                fichier = String.Empty;
                Encoding wind1252 = Encoding.GetEncoding(1252);
                string localfilename = "SuperC" + i.ToString() + ".txt";
                StreamReader sr;
                try
                {
                    sr = new StreamReader(localfilename, wind1252);
                }
                catch
                {
                    continue;
                }
                
                while (sr.Peek() >= 0)
                {
                    string ligne = sr.ReadLine();
                    if (ligne != "")
                    {
                        fichier += ligne;
                    }
                }

                // encoding = Windows-1252
                fichier = fichier.Replace("</h1>", "</h1><p>");
                fichier = fichier.Replace("<h2>Page : 1</h2>", "</p><h2>Page : 1</h2>");
                fichier = fichier.Replace("<meta name=\"menu\" content=\"flyers.jsp\"/>", "");
                fichier = fichier.Replace("&eacute;", "é");
                fichier = fichier.Replace("&rsquo;", "'");
                fichier = fichier.Replace("&agrave;", "'");
                fichier = fichier.Replace("&ecirc;", "'");
                fichier = fichier.Replace("&ucirc;", "'");
                fichier = fichier.Replace("&icirc;", "'");
                fichier = fichier.Replace("\t", "");
                fichier = fichier.Replace("CAT.", "Catégorie");
                // ajouter <item>
                fichier = fichier.Replace("solid;\" >", "solid;\"><item>");
                fichier = fichier.Replace("<br />", "</item><item>");
                fichier = fichier.Replace("</div>", "</item></div>");
                XmlDocument doc = new XmlDocument();

                doc.LoadXml(fichier);               
                XmlNodeList xmlNodes1 = doc.GetElementsByTagName("item");
                foreach (XmlNode noeud in xmlNodes1)
                {
                    if (noeud.InnerText == "")
                    {
                        continue;
                    }
                    string[] contenu = new string [3];
                    string[] contenuTest = noeud.InnerText.Split(new char[] {'.'}, StringSplitOptions.RemoveEmptyEntries);
                    if (contenuTest.Length == 2)
                    {
                        contenu[0] = contenuTest[0];
                        contenu[1] = contenuTest[0];
                        contenu[2] = contenuTest[1];
                    }
                    else if (contenuTest.Length == 1)
                    {
                        string[] separation = (contenuTest[0]).Split(new string[] {"PRIX"}, StringSplitOptions.RemoveEmptyEntries);
                        contenu[0] = separation[0];
                        contenu[1] = separation[0];
                        contenu[2] = "PRIX"+separation[1];
                    }
                    else if (contenuTest.Length > 3 && contenuTest[3]!="")
                    {
                        contenu[0] = contenuTest[0];
                        // concatener de [1] à [length-1]
                        for (int s = 1; s < contenuTest.Length; s++)
                        {
                            if (contenuTest[s].Contains("PRIX"))
                            {
                                continue;
                            }
                            contenu[1] += contenuTest[s];
                        }                     
                        //sélectionner celui qui a "PRIX" dedans
                        foreach (string prix in contenuTest)
                        {
                            if (prix.Contains("PRIX"))
                            {
                                contenu[2] = prix;
                            }                           
                        }                       
                    }
                    else
                    {
                        contenu[0] = contenuTest[0];
                        contenu[1] = contenuTest[1];
                        contenu[2] = contenuTest[2];
                    }
                    //create node and add value
                    XmlNode nodeProduit = doc.CreateElement("Produit");
                    nodeProduit.InnerText = contenu[0];
                    XmlNode nodeDescription = doc.CreateElement("Description");
                    nodeDescription.InnerText = contenu[1];
                    XmlNode nodePrix = doc.CreateElement("Prix");
                    nodePrix.InnerText = contenu[2];
                    noeud.AppendChild(nodeProduit);
                    noeud.AppendChild(nodeDescription);
                    noeud.AppendChild(nodePrix);
                }
                doc.Save("SuperC" + i.ToString() + ".xml");
                
            }
            //string[] yo = test(fichier);



            StringBuilder output = new StringBuilder();
            // Create an XmlReader
            using (XmlReader reader = XmlReader.Create(new StringReader(fichier)))
            {
                XmlWriterSettings ws = new XmlWriterSettings();
                ws.Indent = true;
                using (XmlWriter writer = XmlWriter.Create(output, ws))
                {

                    // Parse the file and display each of the nodes.
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                            case XmlNodeType.Element:
                                writer.WriteStartElement(reader.Name);
                                break;
                            case XmlNodeType.Text:
                                writer.WriteString(reader.Value);
                                break;
                            case XmlNodeType.XmlDeclaration:
                            case XmlNodeType.ProcessingInstruction:
                                writer.WriteProcessingInstruction(reader.Name, reader.Value);
                                break;
                            case XmlNodeType.Comment:
                                writer.WriteComment(reader.Value);
                                break;
                            case XmlNodeType.EndElement:
                                writer.WriteFullEndElement();
                                break;
                        }
                    }

                }
            }

            return output.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //int i = 199;
            string lecture = traiterFichier("", Encoding.UTF8);
            //XmlDocument doc = new XmlDocument();
            //RemoveTabs(lecture);
            //doc.LoadXml(lecture);
            //doc.Save("_SuperC" + i.ToString() + ".xml");

            //string[] yo = test(lecture);
        }

        private string RemoveTabs(string fichier)
        {
            char tab = '\u0009';
            fichier = fichier.Replace(tab.ToString(), "");
            return fichier;
        }

        private string[] test(string str)
        {
            string[] str2 = {"<br/>"};
            return str.Split(str2, StringSplitOptions.None);
        }

        private void special()
        {
            int i = 219;
            string fichier = string.Empty;
            Encoding wind1252 = Encoding.GetEncoding(1252);
            string localfilename = "SuperC" + i.ToString() + ".txt";
            StreamReader sr = new StreamReader(localfilename, wind1252);
            while (sr.Peek() >= 0)
            {
                string ligne = sr.ReadLine();
                if (ligne != "")
                {
                    fichier += ligne;
                }
            }
            fichier = fichier.Replace("&eacute;", "e");
            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            special();
        }

    }
}
